프로파일링 (컴퓨터 프로그래밍)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
프로파일링(컴퓨터 프로그래밍)은 프로그램의 성능을 분석하고 개선하기 위한 기술을 의미한다. 1970년대 초 IBM/360, IBM/370에서 시작되어, 프로그램의 실행 시간을 측정하고 병목 현상을 파악하는 데 사용된다. 프로파일러는 이벤트 기반, 통계적, 계측 방식 등 다양한 종류가 있으며, 플랫, 호출 그래프, 입력 민감형 프로파일러와 같이 출력 방식에 따른 분류도 존재한다. 주요 프로파일러로는 gprof, Valgrind, Intel VTune Amplifier XE 등이 있으며, 자바, .NET, 파이썬, 루비 등 다양한 프로그래밍 언어에서 활용된다.
더 읽어볼만한 페이지
- 프로파일러 - Valgrind
Valgrind는 동적 분석 도구들의 프레임워크로, 가상 머신 기반으로 작동하며 메모리 오류 감지, 멀티스레드 코드 분석 등 다양한 기능을 제공하지만, 정적 또는 스택 할당 데이터의 경계 오류는 모두 감지하지 못한다. - 소프트웨어 최적화 - 성능 공학
성능 공학은 시스템의 비즈니스 수익 증대를 위해 정해진 시간 안에 트랜잭션을 처리하도록 보장하고, 시스템 개발 실패 및 유지보수 비용 증가를 방지하며, 성능 관리와 모니터링을 통해 서비스 수준 계약을 준수하도록 한다. - 소프트웨어 최적화 - 프로그램 최적화
프로그램 최적화는 컴퓨터 프로그램의 효율성을 높이는 과정으로, 더 효율적인 구현 방식을 선택하거나 불필요한 기능을 제거하여 문제 해결에 집중하며, 다양한 수준에서 플랫폼 의존적이거나 독립적인 기술을 활용하여 수행되지만, 특정한 품질 지표를 개선하기 위해 다른 측면을 희생하는 트레이드오프가 발생할 수 있다. - 빈 문단이 포함된 문서 - 광주고등법원
광주고등법원은 1952년에 설치되어 광주광역시, 전라남도, 전북특별자치도, 제주특별자치도를 관할하며, 제주와 전주에 원외재판부를 두고 있다. - 빈 문단이 포함된 문서 - 1502년
1502년은 율리우스력으로 수요일에 시작하는 평년으로, 이사벨 1세의 이슬람교 금지 칙령 발표, 콜럼버스의 중앙아메리카 해안 탐험, 바스쿠 다 가마의 인도 상관 설립, 크리미아 칸국의 킵차크 칸국 멸망, 비텐베르크 대학교 설립, 최초의 아프리카 노예들의 신대륙 도착 등의 주요 사건이 있었다.
프로파일링 (컴퓨터 프로그래밍) | |
---|---|
개요 | |
유형 | 동적 프로그램 분석 |
설명 | 프로그램 실행 중 동작 분석 도구 |
상세 정보 | |
목적 | 프로그램 성능 분석 및 병목 현상 식별 |
측정 대상 | 실행 시간 함수 호출 횟수 메모리 사용량 CPU 사용률 |
사용 방법 | 프로그램 코드 계측 또는 운영 체제/가상 머신 수준에서 샘플링 |
장점 | 성능 문제 정확히 파악 가능 코드 최적화 기회 발견 |
단점 | 분석 오버헤드 발생 가능 특정 입력에 의존적인 결과 |
고려 사항 | 프로파일링 도구 선택 (프로그램 언어 및 환경에 적합) 프로파일링 범위 설정 (전체 프로그램 또는 특정 부분) 결과 해석 및 개선 전략 수립 |
활용 분야 | |
소프트웨어 개발 | 성능 테스트 코드 최적화 버그 수정 |
시스템 관리 | 서버 성능 모니터링 자원 사용량 분석 시스템 병목 현상 해결 |
보안 | 악성 코드 분석 취약점 탐색 침해 사고 조사 |
종류 | |
평면 프로파일링 | 각 서브루틴의 실행 시간 평균을 측정 |
호출 그래프 프로파일링 | 서브루틴 호출 시간과 호출 관계를 측정 |
입력 감지 프로파일링 | 다양한 입력에 따른 성능 변화를 측정 |
기타 | |
관련 용어 | 성능 분석 동적 프로그램 분석 코드 최적화 |
2. 역사
성능 분석 도구는 1970년대 초 IBM/360, IBM/370에 존재했고, 일반적으로 실행 코드의 핫 스팟을 감지하기 위해 프로그램 상태 규정어(PSW)를 기록한 타이머 인터럽트에 기반을 두었다. 이는 초기 표집의 한 예이다. 1974년 초 명령어 집합 시뮬레이터는 완전한 추적 및 기타 성능 감시 기능을 허용했다.
프로파일러의 출력 결과는 다음과 같다:[1][2][3]
유닉스에서의 프로파일러를 사용한 성능 분석은 1973년[7]으로 거슬러 올라가는데, 유닉스 시스템에는 개별 함수뿐 아니라 얼마나 많은 프로그램 실행 시간이 사용되었는지를 나열하는 기본 도구인 "prof"가 포함되어 있었다. 1982년에 gprof은 이 개념을 완전한 호출 그래프 분석으로 확장하였다.[8][28]
1994년에 디지털 이큅먼트 코퍼레이션(DEC)의 아미타브 스리바스타바(Amitabh Srivastava)와 앨런 유스터스는 ATOM[9]에 대해 기술한 백서를 출판했다.[29] ATOM은 프로그램을 자신만의 프로파일러로 변환하기 위한 플랫폼이다. 즉, 컴파일 타임에서 코드를 분석 대상의 프로그램에 삽입하는 것이다. 삽입된 코드는 분석 데이터를 출력한다. 스스로 분석하여 프로그램을 수정하는 이 기술을 계측(instrumentation)이라 부른다.
2004년 gprof와 ATOM의 백서가 현 시대의 가장 영향력 있는 PLDI 백서의 50가지 목록에 등장하였다.[10][30]
3. 프로파일러의 이용
요약 프로파일 정보는 주로 이벤트가 발생하는 소스 코드 문장에 주석으로 표시되므로, 측정 데이터의 크기는 프로그램의 코드 크기에 비례한다.[1]
```
/* ------------ source------------------------- count */
0001 IF X = "A" 0055
0002 THEN DO
0003 ADD 1 to XCOUNT 0032
0004 ELSE
0005 IF X = "B" 0055
```
순차 프로그램의 경우 요약 프로파일만으로도 충분하지만, 병렬 프로그램의 성능 문제(메시지 대기 또는 동기화 문제)는 이벤트의 시간 관계에 따라 달라지므로, 전체 트레이스가 필요하다.[1] (전체) 트레이스의 크기는 프로그램의 명령어 경로 길이에 비례하여 커지므로 실용적이지 않을 수 있다. 따라서 프로그램의 특정 지점에서 트레이스를 시작하고 다른 지점에서 종료하여 출력을 제한할 수 있다.
하이퍼바이저와의 지속적인 상호 작용(예: 화면 표시를 통한 지속 또는 주기적 모니터링)으로 실행 중 원하는 지점에서 트레이스를 켜거나 끌 수 있으며, 실행 중인 프로그램에 대한 진행 중인 메트릭을 볼 수 있다.[1] 또한 비동기 프로세스를 중요한 시점에서 일시 중단하여 다른 병렬 프로세스와의 상호 작용을 자세히 검토할 수 있다.
프로파일러는 개별 메서드, 모듈 또는 프로그램 규모에 적용하여 실행 시간이 오래 걸리는 코드를 식별하고 성능 병목 현상을 찾아낼 수 있다.[1] 또한 다양한 런타임 조건[2] 또는 부하를 처리하도록 최적화하기 위해 타이밍 관점에서 코드를 이해하는 데 사용될 수 있다.[3] 프로파일링 결과는 프로파일 기반 최적화를 제공하는 컴파일러에서 사용할 수 있으며,[4] 개별 알고리즘의 설계 및 최적화를 안내하는 데에도 활용될 수 있다. Krauss 일치 와일드카드 알고리즘이 그 예시이다.[5] 일부 애플리케이션 성능 관리 시스템에는 프로파일러가 내장되어 분산 컴퓨팅 애플리케이션에서 트랜잭션 처리 워크로드에 대한 통찰력을 제공하기 위해 프로파일링 데이터를 집계한다.[6]
4. 프로파일러 종류
프로파일러는 프로그램 실행 시 함수 호출 빈도와 소요 시간 등 다양한 정보를 수집하여 성능 분석을 돕는 도구이다. 프로파일러는 데이터를 수집하는 방식과 출력 형식에 따라 여러 종류로 나뉜다.[1] 프로파일러 사용은 성능 엔지니어링에서 중요하다.
프로파일러는 크게 출력 기반 분류와 데이터 수집 방식 기반 분류로 나눌 수 있다.
- 출력 기반 분류
- 플랫 프로파일러(flat profiler): 함수별 평균 실행 시간을 측정하지만, 호출 관계는 고려하지 않는다.
- 호출 그래프 프로파일러(call-graph profiler): 함수 호출 시간, 빈도, 호출 체인을 보여준다.
- 입력 민감형 프로파일러(Input-sensitive profiler): 입력 값에 따른 성능 변화를 측정한다.
- 데이터 수집 방식 기반 분류
- 이벤트 기반 프로파일러(Event-based profiler): 자바의 JVMTI, .NET의 프로파일링 API, 파이썬의 profile 모듈, 루비의 profile.rb 모듈 등이 있다.
- 통계적 프로파일러(Statistical profiler): 샘플링을 통해 대상 프로그램의 호출 스택을 주기적으로 조사한다. 애플(Apple Inc.)의 Shark, OProfile, 인텔(Intel) VTune 등이 있다.
- 계측(Instrumentation): 대상 프로그램에 코드를 추가하여 정보를 수집한다. 수동, 자동 소스 레벨, 중간 언어, 컴파일러 지원, 바이너리 변환, 런타임 계측, 런타임 주입 등 다양한 방법이 있다.
- 인터프리터 계측(Interpreter instrumentation): 인터프리터 디버그 옵션을 사용하여 성능 지표를 수집한다.
- 하이퍼바이저/시뮬레이터(Hypervisor/simulator): 하이퍼바이저 아래에서 프로그램을 실행하여 데이터를 수집한다.
4. 1. 출력 기반 분류
프로파일러의 출력은 주로 다음과 같은 형식을 취한다.- 관찰된 이벤트의 통계적 요약 (프로파일): 요약 프로파일 정보는 주로 이벤트가 발생한 소스 코드 문장에 주석으로 표시되며, 측정 데이터의 크기는 프로그램 코드 크기에 비례한다.
- 기록된 이벤트의 스트림 (트레이스): 순차 프로그램에서는 요약 프로파일만으로 충분하지만, 병렬 프로그램의 성능 문제(메시지 대기, 동기화 문제 등)는 이벤트의 시간 관계에 따라 달라지므로, 전체 트레이스가 필요할 수 있다. 트레이스의 크기는 프로그램의 명령어 경로 길이에 비례하여 커질 수 있으므로, 특정 지점에서 트레이스를 시작하고 종료하는 방식으로 출력을 제한할 수 있다.
- 하이퍼바이저와의 지속적인 상호 작용: 화면 표시를 통해 지속적 또는 주기적으로 모니터링할 수 있다. 실행 중 원하는 시점에 트레이스를 켜거나 끌 수 있으며, 실행 중인 프로그램의 진행 상황 메트릭을 확인할 수 있다. 또한, 비동기 프로세스를 일시 중단하여 다른 병렬 프로세스와의 상호 작용을 자세히 검토할 수 있다.
프로파일러는 프로그램의 성능 병목 현상을 식별하기 위해 개별 메서드, 모듈 또는 프로그램 전체에 적용될 수 있다.[1] 또한, 다양한 런타임 조건[2] 또는 부하에 따라 코드를 최적화하는 데 사용될 수 있다.[3] 프로파일링 결과는 프로파일 기반 최적화를 지원하는 컴파일러에서 활용될 수 있으며,[4] 개별 알고리즘의 설계 및 최적화를 위한 지침으로 사용될 수 있다. Krauss 일치 와일드카드 알고리즘이 그 예시이다.[5] 일부 애플리케이션 성능 관리 시스템은 프로파일링 데이터를 집계하여 분산 컴퓨팅 애플리케이션에서 트랜잭션 처리 워크로드에 대한 통찰력을 제공한다.[6]
PLDI '94에서 ATOM은 다음과 같이 말했다.
4. 1. 1. 플랫 프로파일러(flat profiler)
플랫 프로파일러는 프로그램 실행 중 각 함수별 평균 실행 시간을 계산한다. 이때 호출된 함수의 호출자나 호출되는 함수 간의 관계, 즉 문맥(컨텍스트)를 고려하지 않고 실행 시간만을 측정한다.[1] 따라서 어떤 함수가 다른 함수를 호출했는지, 또는 호출된 함수가 어떤 함수에 의해 호출되었는지 등의 정보는 플랫 프로파일러 결과에서 알 수 없다.4. 1. 2. 호출 그래프 프로파일러(call-graph profiler)
호출 그래프 프로파일러[8]는 함수의 호출 시간과 빈도, 그리고 호출 대상에 기반한 호출 체인을 보여준다. 일부 도구에서는 전체 컨텍스트가 보존되지 않는다.
- 플랫 프로파일러: 루틴별 평균 실행 시간을 계산하며, 호출 측과 같은 컨텍스트를 고려한 상세한 분석은 수행하지 않는다.
- 콜 그래프 프로파일러: 호출 횟수나 빈도를 표시하며, 호출 관계의 연쇄에 따른 분석이 가능하다. 단, 컨텍스트(인수의 값 등)는 고려되지 않는다.
4. 1. 3. 입력 민감형 프로파일러(Input-sensitive profiler)
입력 민감형 프로파일러[11][12][13]는 평면 프로파일러나 호출 그래프 프로파일러에 입력 크기, 입력 값 등 입력 작업 부하의 특징과 성능 측정을 관련시키는 기능을 추가한다. 이러한 프로파일러는 애플리케이션의 성능이 입력에 따라 어떻게 변화하는지 보여주는 차트를 생성한다.- 플랫 프로파일러: 각 루틴의 평균 실행 시간을 계산하지만, 호출한 쪽과 같은 컨텍스트를 고려한 자세한 분석은 하지 않는다.
- 콜 그래프 프로파일러: 호출 횟수와 빈도를 표시하고, 호출 관계의 연결에 따른 분석이 가능하다. 그러나 인수 값과 같은 컨텍스트는 고려하지 않는다.
4. 2. 데이터 수집 방식 기반 분류
프로파일러는 하드웨어 인터럽트, 코드 계측, 명령어 집합 시뮬레이션, 운영체제 후킹, 성능 카운터 등 다양한 기술을 사용하여 데이터를 수집한다.[1]데이터 수집 방식에 따라 프로파일러는 이벤트 기반 프로파일러와 통계적 프로파일러로 분류된다.
4. 2. 1. 이벤트 기반 프로파일러(Event-based profiler)
자바는 JVMTI(JVM Tools Interface) API를 통해 호출, 클래스 로드, 언로드, 스레드 진입/종료와 같은 이벤트를 감지하기 위한 후크를 프로파일러에 제공한다.[24] .NET에서는 프로파일링 API를 사용하여 프로파일링 에이전트를 COM 서버로 CLR에 연결할 수 있다. 자바와 마찬가지로, 런타임은 메서드 JIT / 진입 / 종료, 객체 생성 등과 같은 이벤트를 감지하기 위해 에이전트에 다양한 콜백을 제공하는데, 특히 프로파일링 에이전트가 대상 응용 프로그램의 바이트코드를 임의의 방식으로 다시 작성할 수 있다는 점에서 강력하다. 파이썬 프로파일링에는 profile 모듈, hotshot (호출 그래프 기반) 및 'sys.setprofile' 함수를 사용하여 c_{call,return,exception}, python_{call,return,exception}과 같은 이벤트를 감지하는 기능이 포함되어 있다. 루비는 프로파일링을 위해 파이썬과 유사한 인터페이스를 사용하며, profile.rb 모듈의 플랫 프로파일러와 C 확장인 ruby-prof가 존재한다.다음은 이벤트 기반 프로파일러를 지원하는 프로그래밍 언어 목록이다.
프로그래밍 언어 | 설명 |
---|---|
.NET | 프로파일링 API를 사용하여 프로파일링 에이전트를 COM 서버로 CLR에 연결할 수 있다. Visual Studio에서 분석할 수 있다. |
자바 | JDK 1.4까지는 JVMPI(JVM 프로파일링 인터페이스)를 통해 프로파일러에 대한 훅이 제공되어, 메서드 호출, 클래스 로드/언로드, 스레드 출입 등의 이벤트를 포착할 수 있었다. Java 5부터는 JVMTI(Java Virtual Machine Tool Interface)가 되었다. Java 5 이후에는 Java Management Extension API도 있다. Java 6 update 7 이후에는 Java VisualVM이 제공된다.[24] |
JavaScript | Firebug[25]나 구글 크롬(Google Chrome)[26], 사파리(Safari)[27]의 개발자 도구 등에서 함수의 호출 횟수, 처리 시간 등을 측정할 수 있다. |
파이썬 | 콜 그래프를 기반으로 프로파일 정보를 수집하며, sys.set_profile() 모듈을 사용하여 c_{call,return,exception} 및 python_{call,return,exception}과 같은 이벤트를 포착한다. |
루비 | 파이썬과 마찬가지로 인터페이스를 통해 프로파일링을 수행한다. |
4. 2. 2. 통계적 프로파일러(Statistical profiler)
프로파일러는 프로그램 실행 중 다양한 정보를 수집하는 성능 분석 도구이다. 특히 함수 호출 빈도와 소요 시간을 측정한다. 출력 형태는 관찰된 이벤트 집합의 통계적 요약('''프로파일''')과 기록된 이벤트 열거('''트레이스''')가 있다. 프로파일러는 하드웨어 인터럽트, 코드 계측, 명령어 집합 시뮬레이션, 운영 체제 후킹, 성능 카운터 등 다양한 기술을 사용하여 데이터를 수집한다.[1] 프로파일러 사용은 성능 엔지니어링에서 중요하다.프로파일은 통계적 총합으로 소스 코드 위치와 연관 지어 이벤트를 기록하므로, 데이터 크기는 대상 코드 크기에 거의 비례한다. 반면, 트레이스 크기는 프로그램 실행 시간에 비례하여 커지므로 실용적이지 않을 수 있다. 병렬성이 없는 프로그램에서는 일반적으로 프로파일로 충분하지만, 병렬성이 있는 프로그램의 성능 문제(메시지 대기나 동기화 문제)에 대해서는 이벤트가 시계열로 어떤 순서로 발생하는지가 중요하므로 완전한 트레이스를 필요로 하는 경우가 많다.
일부 프로파일러는 샘플링을 통해 정보를 수집한다. 샘플링형 프로파일러는 운영 체제의 인터럽트를 사용하여 대상 프로그램의 호출 스택을 일정 간격으로 조사한다. 샘플링 프로파일은 일반적으로 정밀도가 낮지만 대상 프로그램을 통상과 거의 동일한 속도로 실행할 수 있다.[14][15]
결과 데이터는 정확한 값이 아니라 통계적 근사치이다. "실제 오차의 양은 일반적으로 한 샘플링 기간보다 크다. 실제로, 어떤 값이 샘플링 기간의 n배라면, 예상 오차는 n의 제곱근에 해당하는 샘플링 기간이다."[16]
실제로 샘플링 프로파일러는 대상 프로그램에 대한 침투성이 적고, 따라서 메모리 캐시나 명령어 디코딩 파이프라인과 같은 부작용이 적기 때문에 다른 방식보다 대상 프로그램의 실행에 대한 더 정확한 그림을 제공할 수 있다. 또한 실행 속도에 큰 영향을 미치지 않기 때문에, 그렇지 않으면 숨겨질 수 있는 문제를 감지할 수 있다. 작고 자주 호출되는 루틴 또는 '타이트한' 루프의 비용을 과대 평가하는 것에도 비교적 면역력이 있다. 시스템 호출 처리와 같이 사용자 모드와 인터럽트 가능한 커널 모드에서 소비된 상대적인 시간을 보여줄 수 있다.
그럼에도 불구하고, 인터럽트를 처리하는 커널 코드는 약간의 CPU 사이클 손실, 캐시 사용량 변경을 초래하며, 인터럽트 불가능한 커널 코드에서 발생하는 다양한 작업(마이크로초 범위의 활동)을 구별할 수 없다.
전용 하드웨어는 이를 넘어설 수 있다. ARM Cortex-M3 및 일부 최신 MIPS 프로세서 JTAG 인터페이스에는 PCSAMPLE 레지스터가 있어, 프로그램 카운터를 진정으로 감지할 수 없는 방식으로 샘플링하여 플랫 프로파일의 비침투적인 수집을 허용한다.
Java/관리형 코드용으로 일반적으로 사용되는[17] 통계적 프로파일러로는 SmartBear Software의 AQtime[18]과 마이크로소프트의 CLR Profiler가 있다.[19] 이러한 프로파일러는 애플(Apple Inc.)의 Shark (OSX),[20] OProfile (Linux),[21] 인텔(Intel) VTune 및 Parallel Amplifier (인텔 병렬 스튜디오(Intel Parallel Studio)의 일부), 오라클(Oracle Corporation) Performance Analyzer를 지원한다.[22]
4. 2. 3. 계측(Instrumentation)
코드 계측은 프로파일링에서 데이터를 수집하는 중요한 기술 중 하나이다. 이 기법은 대상 프로그램에 특정 명령어를 추가하여 프로그램 실행에 대한 정보를 수집한다.계측은 프로그래머가 직접 수행할 수도 있고, 자동화된 도구를 사용할 수도 있다. 계측 방식에 따라 수집되는 정보의 종류와 프로그램 성능에 미치는 영향이 달라진다.
계측 방법:
방법 | 설명 |
---|---|
수동 | 프로그래머가 직접 코드를 삽입하여 실행 시간 등을 측정한다. 애플리케이션 응답 측정과 같은 표준 API를 활용할 수 있다. |
자동 소스 레벨 | 자동화된 도구가 소스 코드에 계측 코드를 추가한다. |
중간 언어 | 어셈블리 언어나 디컴파일된 바이트코드에 계측 코드를 추가하여 여러 상위 레벨 언어를 지원한다. |
컴파일러 지원 | 컴파일러가 프로파일링을 위한 코드를 삽입한다. (예: gcc -pg ...) |
바이너리 변환 | 컴파일된 실행 파일에 계측 코드를 추가한다. (예: ATOM) |
런타임 계측 | 실행 직전에 코드를 계측하며, 도구가 프로그램 실행을 완전히 제어한다. |
런타임 주입 | 런타임 계측보다 가벼운 방식으로, 런타임에 코드를 수정하여 도우미 함수를 호출한다. (예: DynInst) |
프로그램을 계측하면 성능 변화가 발생할 수 있으며, 때로는 부정확한 결과나 하이젠버그를 초래할 수도 있다.[23] 예를 들어, 각 프로시저나 루틴 호출을 계산하는 코드를 추가하는 것은 각 문장이 실행된 횟수를 계산하는 것보다 프로그램에 미치는 영향이 적다. 일부 컴퓨터는 정보 수집을 위한 특수 하드웨어를 갖추고 있어 프로그램에 미치는 영향을 최소화할 수 있다.
4. 2. 4. 인터프리터 계측(Interpreter instrumentation)
인터프리터 디버그 옵션을 사용하면 인터프리터가 각 대상 구문을 만날 때 성능 지표를 수집할 수 있다.[14] 바이트코드, 제어 테이블 또는 JIT 인터프리터는 일반적으로 대상 코드 실행을 완벽하게 제어할 수 있는 세 가지 예시이며, 따라서 매우 포괄적인 데이터 수집 기회를 제공한다.[15]4. 2. 5. 하이퍼바이저/시뮬레이터(Hypervisor/simulator)
프로파일러는 하이퍼바이저 아래에서 (보통) 수정되지 않은 프로그램을 실행하여 데이터를 수집한다. SIMMON이 그 예시이다.[14][15]5. 주요 프로파일러
성능 분석 도구도 참조
5. 1. 한국에서 주로 사용되는 프로파일러
성능 분석 도구도 참조참조
[1]
웹사이트
How to find the performance bottleneck in C# desktop application?
https://stackoverflo[...]
Stack Overflow
[2]
웹사이트
Performance Profiling with a Focus
http://www.developfo[...]
Develop for Performance
[3]
웹사이트
What is code profiling? Learn the 3 Types of Code Profilers
https://stackify.com[...]
Disqus
[4]
웹사이트
Getting Started with Profile Guided Optimization
https://textslashpla[...]
WordPress
[5]
웹사이트
Matching Wildcards: An Improved Algorithm for Big Data
http://www.developfo[...]
Develop for Performance
[6]
웹사이트
List of .Net Profilers: 3 Different Types and Why You Need All of Them
https://stackify.com[...]
Disqus
[7]
문서
Unix Programmer's Manual, 4th Edition
http://www.tuhs.org/[...]
[8]
간행물
gprof: a Call Graph Execution Profiler
http://docs.freebsd.[...]
[9]
간행물
ATOM: A system for building customized program analysis tools
http://www.ece.cmu.e[...]
[10]
문서
20 Years of PLDI (1979–1999): A Selection
http://www.cs.utexas[...]
[11]
간행물
Input-Sensitive Profiling
https://web.archive.[...]
[12]
간행물
Algorithmic Profiling
[13]
간행물
Argument Controlled Profiling
[14]
웹사이트
Timing and Profiling - Basic Block Profilers
https://archive.cnx.[...]
[15]
논문
Optimally profiling and tracing programs
https://www.classes.[...]
ACM Digital Library
2018-05-18
[16]
웹인용
Statistical Inaccuracy of gprof
Output
http://www.cs.utah.e[...]
2012-05-29
[17]
웹사이트
Popular C# Profilers
http://www.ginktage.[...]
Gingtage
[18]
웹사이트
Sampling Profiler - Overview
https://support.smar[...]
SmartBear Software
[19]
웹사이트
Profiling Overview
https://docs.microso[...]
Microsoft
[20]
웹사이트
Performance Tools
https://developer.ap[...]
Apple, Inc.
[21]
웹사이트
Evaluate performance for Linux on Power
https://www.ibm.com/[...]
[22]
conference
Suitability of Performance Tools for OpenMP Task-Parallel Programs
https://books.google[...]
[23]
magazine
Profile-Guided Optimizations
http://www.drdobbs.c[...]
[24]
문서
Java VisualVM
http://java.sun.com/[...]
[25]
문서
JavaScript Debugger and Profiler
https://getfirebug.c[...]
[26]
문서
Chrome DevTools
https://developers.g[...]
[27]
문서
Safari Web Development Tools
https://developer.ap[...]
[28]
간행물
gprof: a Call Graph Execution Profiler
http://docs.freebsd.[...]
[29]
문서
Atom: A system for building customized program analysis tools
http://www.ece.cmu.e[...]
[30]
문서
20 Years of PLDI (1979–1999): A Selection, Kathryn S. McKinley, Editor
http://www.cs.utexas[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com